/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

<template>
  <div class="flex-v wrapper" style="flex-grow:1;height: 100%;">
    <ToolGroup :rocketGlobal="rocketGlobal" :rocketComps="rocketComps"/>
    <ToolBar :rocketGlobal="rocketGlobal" :compType="compType" :durationTime="durationTime"  :stateDashboard='stateDashboardOption'/>
    <ToolNav :rocketGlobal="rocketGlobal" :rocketComps="rocketComps"/>
    <div class="dashboard-container clear">
      <DashboardItem
      v-for="(i, index) in rocketComps.tree[this.rocketComps.group]
      .children[this.rocketComps.current].children" :key="index+i.t+i.w+i.d" :index="index" 
       :rocketGlobal="rocketGlobal" :i="i" :dragIndex="dragIndex"
       @dragStart="dragStart">
      </DashboardItem>
    </div>
    <DashboardComp v-if="rocketGlobal.edit" :compType="compType" :rocketComps="rocketComps"/>
  </div>
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';
import { Action, Getter, State, Mutation } from 'vuex-class';
import ToolBar from '@/views/components/dashboard/tool-bar.vue';
import ToolGroup from '@/views/components/dashboard/tool-group.vue';
import ToolNav from '@/views/components/dashboard/tool-nav.vue';
import DashboardItem from '@/views/components/dashboard/dashboard-item.vue';
import DashboardComp from '@/views/components/dashboard/dashboard-comp.vue';

@Component({
  components: {
    ToolBar,
    ToolGroup,
    ToolNav,
    DashboardItem,
    DashboardComp,
  },
})
export default class Dashboard extends Vue {
  @State('rocketbot') private rocketGlobal: any;
  @State('rocketOption') private stateDashboardOption!: any;
  @State('rocketData') private rocketComps!: any;
  @Mutation('SET_EVENTS') private SET_EVENTS: any;
  @Mutation('SET_COMPS_TREE') private SET_COMPS_TREE: any;
  @Mutation('SET_CURRENT_COMPS') private SET_CURRENT_COMPS: any;
  @Action('MIXHANDLE_GET_OPTION') private MIXHANDLE_GET_OPTION: any;
  @Action('GET_QUERY') private GET_QUERY: any;
  @Getter('durationTime') private durationTime: any;
  private isRouterAlive: boolean = true;
  private dragIndex: number = NaN;
  public dragStart(index: number) {
    this.dragIndex = index;
  }
  public reload(): void {
    this.isRouterAlive = false;
    this.$nextTick(() => { this.isRouterAlive = true; });
  }
  private get compType() {
    return this.rocketComps.tree[this.rocketComps.group].type;
  }
  private handleRefresh() {
    this.GET_QUERY({
      serviceId: this.stateDashboardOption.currentService.key || '',
      endpointId: this.stateDashboardOption.currentEndpoint.key || '',
      endpointName: this.stateDashboardOption.currentEndpoint.label || '',
      instanceId: this.stateDashboardOption.currentInstance.key || '',
      databaseId: this.stateDashboardOption.currentDatabase.key || '',
      duration: this.durationTime,
    });
  }
  private handleOption() {
    return this.MIXHANDLE_GET_OPTION({compType: this.compType, duration: this.durationTime})
      .then(() => {this.handleRefresh(); });
  }
  // private beforeCreate() {
  //   this.$store.registerModule('rocketDashboard', dashboard);
  // }
  private beforeMount() {
    if (window.localStorage.getItem('dashboard')) {
      const data: string = `${window.localStorage.getItem('dashboard')}`;
      this.SET_COMPS_TREE(JSON.parse(data));
    }
    this.handleOption();
    this.SET_EVENTS([this.handleRefresh]);
  }
  // private beforeDestroy() {
  //   this.$store.unregisterModule('rocketDashboard');
  // }
}
</script>
<style lang="scss">
.dashboard-container{
  overflow: auto;
  padding:20px 15px;
  height: 100%;
  flex-grow: 1;
}
</style>

